Spring MVC实现文件下载
 下载文件①

 

下载文件需要将byte数组还原成文件。

         首先使用mybatis将数据库中的byte数组查出来，指定文件名(包括格式)。然后使用OutputStream将文件输入

 

@RequestMapping(value = "downPhotoById")  
public void downPhotoByStudentId(String id, final HttpServletResponse response){  
    PhotoEntity entity = this.photoMapper.getPhotoEntityByPhotoId(id);  
    byte[] data = entity.getPhotoData();  
    String fileName = entity.getFileName()== null ? "照片.png" : entity.getFileName();  
    fileName = URLEncoder.encode(fileName, "UTF-8");  
    response.reset();  
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");  
    response.addHeader("Content-Length", "" + data.length);  
    response.setContentType("application/octet-stream;charset=UTF-8");  
    OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());  
    outputStream.write(data);  
    outputStream.flush();  
    outputStream.close();  
}  
 

<a href="<%=request.getContextPath() %>/downPhotoById.do?id=8000001">下载照片</a>  
 

 下载文件②

 

/** * @Description 下载文件

* @author jxldjsn

* @date 2015年12月11日 下午6:11:33

* @param fileName

* @param file

* @return

* @throws IOException

*/

public ResponseEntity<byte[]> download(String fileName, File file) throws IOException {

String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");

HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", dfileName);

return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }


 下载文件③

//文件下载 主要方法
  public static void download(HttpServletRequest request,  
      HttpServletResponse response, String storeName, String contentType
       ) throws Exception {  
    
    request.setCharacterEncoding("UTF-8");  
    BufferedInputStream bis = null;  
    BufferedOutputStream bos = null;  
  
    //获取项目根目录
    String ctxPath = request.getSession().getServletContext()  
        .getRealPath("");  
    
    //获取下载文件露肩
    String downLoadPath = ctxPath+"/uploadFile/"+ storeName;  
  
    //获取文件的长度
    long fileLength = new File(downLoadPath).length();  

    //设置文件输出类型
    response.setContentType("application/octet-stream");  
    response.setHeader("Content-disposition", "attachment; filename="  
        + new String(storeName.getBytes("utf-8"), "ISO8859-1")); 
    //设置输出长度
    response.setHeader("Content-Length", String.valueOf(fileLength));  
    //获取输入流
    bis = new BufferedInputStream(new FileInputStream(downLoadPath));  
    //输出流
    bos = new BufferedOutputStream(response.getOutputStream());  
    byte[] buff = new byte[2048];  
    int bytesRead;  
    while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {  
      bos.write(buff, 0, bytesRead);  
    }  
    //关闭流
    bis.close();  
    bos.close();  
  }  
   
}


下载直接访问控制器如：http:\\localhost:8080/springmvc/download.do